# 应收账款统计表 - 打包脚本
# 使用此脚本将Python程序打包为独立的Windows可执行文件

import os
import subprocess
import sys

def install_pyinstaller():
    """安装PyInstaller"""
    print("正在安装PyInstaller...")
    try:
        subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
        print("PyInstaller 安装成功！")
    except subprocess.CalledProcessError:
        print("PyInstaller 安装失败，请手动安装: pip install pyinstaller")
        return False
    return True

def build_exe():
    """打包程序为exe文件"""
    print("开始打包程序...")
    
    # PyInstaller 命令参数
    cmd = [
        "pyinstaller",
        "--onefile",           # 打包为单个exe文件
        "--windowed",          # 不显示控制台窗口
        "--name=应收账款统计表_优化界面",  # 设置exe文件名
        "--icon=icon.ico",     # 图标文件（可选）
        "--add-data=order_data.json;.",  # 包含数据文件（如果存在）
        "--hidden-import=threading",
        "--hidden-import=time",
        "应收账款统计表_优化界面.py"              # 主程序文件
    ]
    
    # 如果没有图标文件，移除图标参数
    if not os.path.exists("icon.ico"):
        cmd.remove("--icon=icon.ico")
    
    # 如果没有数据文件，移除数据文件参数
    if not os.path.exists("order_data.json"):
        cmd.remove("--add-data=order_data.json;.")
    
    try:
        subprocess.check_call(cmd)
        print("\n=== 打包成功！===")
        print("生成的exe文件位于: dist/应收账款统计表_优化界面.exe")
        print("您可以将此exe文件复制到任何Windows电脑上运行，无需安装Python环境。")
        
        # 检查文件大小
        exe_path = "dist/应收账款统计表_优化界面.exe"
        if os.path.exists(exe_path):
            size_mb = os.path.getsize(exe_path) / (1024 * 1024)
            print(f"文件大小: {size_mb:.1f} MB")
            
    except subprocess.CalledProcessError as e:
        print(f"打包失败: {e}")
        print("请检查是否有语法错误或缺少依赖")

def main():
    """主函数"""
    print("=" * 50)
    print("应收账款统计表 - 程序打包工具")
    print("=" * 50)
    
    # 检查主程序文件是否存在
    if not os.path.exists("应收账款统计表_优化界面.py"):
        print("错误: 找不到 应收账款统计表_优化界面.py 文件")
        print("请确保此脚本与 应收账款统计表_优化界面.py 在同一目录下")
        return
    
    # 安装依赖
    print("正在安装必要的依赖包...")
    try:
        subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
        print("依赖包安装完成！")
    except subprocess.CalledProcessError:
        print("依赖包安装失败，请手动安装")
        return
    
    # 安装PyInstaller
    if not install_pyinstaller():
        return
    
    # 打包程序
    build_exe()
    
    print("\n=== 打包说明 ===")
    print("1. 生成的exe文件包含所有依赖，可以在没有Python环境的Windows电脑上运行")
    print("2. 首次运行会在exe文件同目录下创建 order_data.json 数据文件")
    print("3. 所有录入的数据都会自动保存到 order_data.json 文件中")
    print("4. 导出的Excel文件会保存到exe文件同目录下")

if __name__ == "__main__":
    main()
    input("\n按回车键退出...")
